home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / language / asxsrc.arc / ASM.H < prev    next >
C/C++ Source or Header  |  1991-06-10  |  7KB  |  309 lines

  1. /* asm.h */
  2.  
  3. /*
  4.  * (C) Copyright 1989
  5.  * All Rights Reserved
  6.  *
  7.  * Alan R. Baldwin
  8.  * 721 Berkeley St.
  9.  * Kent, Ohio  44240
  10.  */
  11.  
  12. /* DECUS C void definition */
  13.  
  14. #ifdef    decus
  15. #define    VOID    char
  16. #else
  17. #define    VOID    void
  18. #endif
  19.  
  20. /*
  21.  * Case Sensitivity Flag
  22.  */
  23. #define    CASE_SENSITIVE    1
  24.  
  25. /*
  26.  * Assembler header.
  27.  */
  28. #define    LFTERM    '('        /* Left expression delimeter */
  29. #define    RTTERM    ')'        /* Right expression delimeter */
  30.  
  31. #define NCPS    8        /* Chars. per symbol */
  32. #define    HUGE    1000        /* A huge number */
  33. #define NERR    3        /* Errors per line */
  34. #define NINPUT    128        /* Input buffer size */
  35. #define NCODE    128        /* Listing code buffer size */
  36. #define NTITL    64        /* Title buffer size */
  37. #define    NSBTL    64        /* SubTitle buffer size */
  38. #define    NHASH    64        /* Buckets in hash table */
  39. #define    HMASK    077        /* Hash mask */
  40. #define    NLPP    60        /* Lines per page */
  41. #define    MAXFIL    6        /* Maximum command line input files */
  42. #define    MAXINC    6        /* Maximum nesting of include files */
  43. #define    MAXIF    10        /* Maximum nesting of if/else/endif */
  44. #define    FILSPC    15        /* Chars. in filespec */
  45.  
  46. #define NLIST    0        /* No listing */
  47. #define SLIST    1        /* Source only */
  48. #define ALIST    2        /* Address only */
  49. #define CLIST    3        /* Code */
  50.  
  51. #define    dot    (&sym[0])    /* Dot, current loc */
  52. #define    dca    (&area[0])    /* Dca, default code area */
  53.  
  54. typedef    unsigned addr_t;
  55.  
  56. struct    area
  57. {
  58.     struct    area *a_ap;    /* Area link */
  59.     char    a_id[NCPS];    /* Area Name */
  60.     int    a_ref;        /* Ref. number */
  61.     addr_t    a_size;        /* Area size */
  62.     addr_t    a_fuzz;        /* Area fuzz */
  63.     int    a_flag;        /* Area flags */
  64. };
  65.  
  66. #define    A_CON    000        /* Concatenating */
  67. #define    A_OVR    004        /* Overlaying */
  68. #define    A_REL    000        /* Relocatable */
  69. #define    A_ABS    010        /* absolute */
  70.  
  71. struct    mne
  72. {
  73.     struct    mne  *m_mp;    /* Hash link */
  74.     char    m_id[NCPS];    /* Mnemonic */
  75.     char    m_type;        /* Mnemonic subtype */
  76.     char    m_flag;        /* Mnemonic flags */
  77.     addr_t    m_valu;        /* Value */
  78. };
  79.  
  80. struct    sym
  81. {
  82.     struct    sym  *s_sp;    /* Hash link */
  83.     struct    tsym *s_tsym;    /* Temporary symbol link */
  84.     char    s_id[NCPS];    /* Symbol */
  85.     char    s_type;        /* Symbol subtype */
  86.     char    s_flag;        /* Symbol flags */
  87.     struct    area *s_area;    /* Area line, 0 if absolute */
  88.     int    s_ref;        /* Ref. number */
  89.     addr_t    s_addr;        /* Address */
  90. };
  91.  
  92. #define    S_GBL    01        /* Global */
  93. #define    S_ASG    02        /* Assigned */
  94. #define    S_MDF    04        /* Mult. def */
  95. #define    S_END    010        /* End mark for pst. */
  96.  
  97. #define    S_NEW    0        /* New name */
  98. #define    S_USER    1        /* User name */
  99.                 /* unused slot */
  100.                 /* unused slot */
  101.                 /* unused slot */
  102.  
  103. #define    S_BYTE    5        /* .byte */
  104. #define    S_WORD    6        /* .word */
  105. #define    S_ASCII    7        /* .ascii */
  106. #define    S_ASCIZ    8        /* .asciz */
  107. #define    S_BLK    9        /* .blkb or .blkw */
  108. #define    S_INCL    10        /* .include */
  109. #define    S_DAREA    11        /* .area */
  110. #define    S_ATYP    12        /* .area type */
  111. #define    S_AREA    13        /* .area name */
  112. #define    S_GLOBL    14        /* .globl */
  113. #define    S_PAGE    15        /* .page */
  114. #define    S_TITLE    16        /* .title */
  115. #define    S_SBTL    17        /* .sbttl */
  116. #define    S_IF    18        /* .if */
  117. #define    S_ELSE    19        /* .else */
  118. #define    S_ENDIF    20        /* .endif */
  119. #define    S_EVEN    21        /* .even */
  120. #define    S_ODD    22        /* .odd */
  121. #define    S_RADIX    23        /* .radix */
  122. #define    S_ORG    24        /* .org */
  123. #define    S_MODUL    25        /* .module */
  124.  
  125. struct    tsym
  126. {
  127.     struct    tsym *t_lnk;    /* Link to next */
  128.     char t_num;        /* 0-255$ */
  129.     char t_flg;        /* flags */
  130.     struct    area *t_area;    /* Area */
  131.     addr_t    t_addr;        /* Address */
  132. };
  133.  
  134. extern    jmp_buf    jump_env;
  135. extern    int    inpfil;
  136. extern    int    incfil;
  137. extern    int    cfile;
  138. extern    int    flevel;
  139. extern    int    tlevel;
  140. extern    int    ifcnd[];
  141. extern    int    iflvl[];
  142. extern    int    radix;
  143. extern    VOID    *new();
  144. extern    int    line;
  145. extern    int    page;
  146. extern    int    lop;
  147. extern    int    pass;
  148. extern    int    lflag;
  149. extern    int    gflag;
  150. extern    int    aflag;
  151. extern    int    oflag;
  152. extern    int    sflag;
  153. extern    int    xflag;
  154. extern    addr_t    laddr;
  155. extern    addr_t    fuzz;
  156. extern    int    lmode;
  157. extern    struct    area    area[];
  158. extern    struct    area *areap;
  159. extern    struct    sym    sym[];
  160. extern    struct    sym *symp;
  161. extern    struct    sym *symhash[NHASH];
  162. extern    struct    mne *mnehash[NHASH];
  163. extern    char    *ep;
  164. extern    char    eb[NERR];
  165. extern    char    *ip;
  166. extern    char    ib[NINPUT];
  167. extern    char    *cp;
  168. extern    char    cb[NCODE];
  169. extern    char    tb[NTITL];
  170. extern    char    stb[NSBTL];
  171. extern    char    symtbl[];
  172. extern    char    aretbl[];
  173. extern    char    module[NCPS];
  174. extern    FILE    *lfp;
  175. extern    FILE    *ofp;
  176. extern    FILE    *tfp;
  177. extern    FILE    *sfp[];
  178. extern    FILE    *ifp[];
  179. extern    char    ctype[];
  180.  
  181. #if    CASE_SENSITIVE
  182. #else
  183. extern    char    ccase[];
  184. #endif
  185.  
  186. #define    LETTER    0
  187. #define    DIGIT    1
  188. #define    BINOP    2
  189. #define ETC    3
  190. #define    ILL    4
  191. #define    SPACE    5
  192.  
  193. /*
  194.  * Expression.
  195.  */
  196. struct    expr
  197. {
  198.     char    e_mode;        /* Address mode */
  199.     char    e_flag;        /* Symbol flag */
  200.     addr_t    e_addr;        /* Address */
  201.     union    {
  202.         struct area *e_ap;
  203.         struct sym  *e_sp;
  204.     } e_base;        /* Rel. base */
  205. };
  206.  
  207. /* C Library functions */
  208. /* for reference only
  209. extern    VOID *        calloc();
  210. extern    int        fclose();
  211. extern    char *        fgets();
  212. extern    FILE *        fopen();
  213. extern    int        fprintf();
  214. extern    VOID        longjmp();
  215. extern    VOID *        malloc();
  216. extern    int        printf();
  217. extern    char        putc();
  218. extern    int        rewind();
  219. extern    int        setjmp();
  220. extern    int        strcmp();
  221. extern    char *        strcpy();
  222. extern    int        strlen();
  223. extern    char *        strncpy();
  224. */
  225.  
  226. /* Machine independent functions */
  227.  
  228. /* asmain.c */
  229. extern    VOID        asmbl();
  230. extern    VOID        main();
  231. extern    VOID        newdot();
  232. extern    VOID        phase();
  233. extern    VOID        usage();
  234.  
  235. /* aslex.c */
  236. extern    char        endline();
  237. extern    char        get();
  238. extern    VOID        getid();
  239. extern    int        getline();
  240. extern    char        getmap();
  241. extern    char        getnb();
  242. extern    int        more();
  243. extern    VOID        unget();
  244.  
  245. /* assym.c */
  246. extern    struct    area *    alookup();
  247. extern    struct    mne *    mlookup();
  248. extern    int        hash();
  249. extern    struct    sym *    lookup();
  250. extern    VOID *        new();
  251. extern    int        symeq();
  252. extern    VOID        syminit();
  253. extern    VOID        symglob();
  254. extern    VOID        allglob();
  255.  
  256. /* assubr.c */
  257. extern    VOID        aerr();
  258. extern    VOID        diag();
  259. extern    VOID        err();
  260. extern    VOID        qerr();
  261. extern    VOID        rerr();
  262.  
  263. /* asexpr.c */
  264. extern    VOID        abscheck();
  265. extern    addr_t        absexpr();
  266. extern    int        digit();
  267. extern    VOID        expr();
  268. extern    int        oprio();
  269. extern    VOID        term();
  270.  
  271. /* aslist.c */
  272. extern    VOID        list();
  273. extern    VOID        list1();
  274. extern    VOID        lstsym();
  275. extern    VOID        slew();
  276.  
  277. /* asout.c */
  278. extern    int        hibyte();
  279. extern    int        lobyte();
  280. extern    VOID        out();
  281. extern    VOID        outab();
  282. extern    VOID        outarea();
  283. extern    VOID        outaw();
  284. extern    VOID        outall();
  285. extern    VOID        outbuf();
  286. extern    VOID        outchk();
  287. extern    VOID        outgsd();
  288. extern    VOID        outrb();
  289. extern    VOID        outrw();
  290. extern    VOID        outsym();
  291. extern    VOID        out_lb();
  292. extern    VOID        out_lw();
  293. extern    VOID        out_rw();
  294. extern    VOID        out_tw();
  295.  
  296.  
  297. /* Machine dependent variables */
  298.  
  299. extern    char *        cpu;
  300. extern    char *        dsft;
  301. extern    int        hilo;
  302. extern    struct    mne    mne[];
  303.  
  304. /* Machine dependent functions */
  305.  
  306. extern    VOID        machin();
  307. extern    VOID        minit();
  308.  
  309.